package NetWork;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class TcpEchoClient {
    private Socket socket;
    public TcpEchoClient(String serverIp,int serverPort) throws IOException {
        //这个对象构造的过程,就会触发tcp建立连接的过程,如果客服端没有这个代码,那么服务器的accpet就会产生阻塞
        //Socket 构造方法 能够识别 点分十进制的ip地址,比DatagramPacket方便
        //new 这个对象的同时会进行tcp连接操作
        socket = new Socket(serverIp,serverPort);
    }
    public void start() {
        //1. 先从键盘上读取用户输入的内容
        System.out.println("客户端启动!!!");
        Scanner scanner = new Scanner(System.in);
        try (InputStream inputStream = socket.getInputStream();
             OutputStream outputStream = socket.getOutputStream()) {
            while (true) {
                System.out.print("> ");
                String request = scanner.next();
                if (request.equals("exit")) {
                    return;
                }
                //2. 把读到的内容构造成请求,发送给服务器
                PrintWriter printWriter = new PrintWriter(outputStream);
                //这里是在写入到网卡的时候,加上了一个\n
                //注意 : 这里如果时使用print,那么服务器就不能读取到一个正常的字符串,
                // 因为next()这个方法读取需要遇到空格,换行,或者其他空白符,才能结束读取,如果遇不到就会一直等读到这些才会停止读取
                printWriter.println(request);
                printWriter.flush();
                //3. 连接服务器的响应
                Scanner respScanner = new Scanner(inputStream);
                String response = respScanner.next();
                //4. 把响应结果显示到屏幕上
                System.out.println(response);
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        TcpEchoClient client = new TcpEchoClient("127.0.0.1",9090);
        client.start();
    }
}
